package controller;

import java.sql.SQLException;

import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

import org.apache.catalina.session.StandardSessionFacade;

import common.DatenbankVerwaltung;
/**
 * Klasse um eine Niederlage zu melden. Beinhaltet die Steuerung der Positionen der Spieler, 
 * @author Simon Mary, Sebastian Scheinert
 *
 */
public class ReportBean {
	
	private DatenbankVerwaltung db;
	private String username;
	private boolean success;

	public boolean reportLoss() {
		// Turnier ID holen
		FacesContext context = FacesContext.getCurrentInstance();
		ExternalContext exContext = context.getExternalContext();
		
		// Turnier ID und username laden
		int id = 0;
		String tournyID = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("tourneyID");
		if(tournyID != null)
			id = Integer.parseInt(tournyID); 
		
		StandardSessionFacade session = (StandardSessionFacade) exContext.getSession(false);
		if(session != null){
			this.username = (String) session.getAttribute("username");
		}
		
		if(id > 0 && username != null) {
			// DB Verbindung erstellen
			db = new DatenbankVerwaltung();
			try {
				db.createDBConnection(exContext.getInitParameter("dburl"), exContext.getInitParameter("dbusername"), exContext.getInitParameter("dbpassword"));
				
				//position der beiden spieler aus db ziehen
				Object[][] rounds = db.getNumOfRounds(username, id);
				Object[][] posPlayer = db.getPosOfPlayer(this.username, id, rounds.length - 1);
				int posNum = Integer.parseInt(posPlayer[0][0]+"");
				int posEnemy;
				posEnemy = posNum % 2 == 0 ?  posNum + 1 : posNum - 1;
				//username dieser pos
				Object[][] opponentIDarray = db.getUserIDByPos(id, posEnemy, rounds.length - 1);
				int opponentID = Integer.parseInt(opponentIDarray[0][0]+"");
				
				//gegner im turnier eine runde weiter setzen
				db.updatePos(opponentID, id, posEnemy/2, rounds.length);
				
				Object[][] playerCount = db.checkFinish(id, rounds.length);
				if (Integer.parseInt(playerCount[0][0]+"") == 1) {
					db.setTourneyFinished(id);
				}
			} catch (SQLException e) {
				e.printStackTrace();
				return false;
			}
		}
		return true;
	}
	public boolean getSuccess() {
		return reportLoss();
	}
	public void setSuccess(boolean reportLoss) {
		this.success = reportLoss;
	}
	
}
